{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Building a MatGraphDB Example with MPNearHull Data\n",
    "\n",
    "In this notebook, we demonstrate how to build a materials graph database using the\n",
    "[MatGraphDB](https://github.com/your/matgraphdb) framework with the MPNearHull dataset.\n",
    "\n",
    "The steps include:\n",
    "1. Importing required libraries and setting up configuration paths.\n",
    "2. Downloading and extracting the dataset (and raw materials data if needed).\n",
    "3. Creating a MatGraphDB instance.\n",
    "4. Initializing node generators.\n",
    "5. Initializing edge generators.\n",
    "6. Verifying the database setup.\n",
    "\n",
    "Follow along and run each cell to see how the database is constructed."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Library imports and paths are set.\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import shutil\n",
    "import zipfile\n",
    "import gdown\n",
    "\n",
    "# Get the data directory from the config. You can change this to your own data directory.\n",
    "DATA_DIR = os.path.join(\"..\",\"..\",\"data\",\"examples\",\"01\")\n",
    "# Define the path to store the raw materials data.\n",
    "MATERIALS_PATH = os.path.join(DATA_DIR, \"material\")\n",
    "\n",
    "MATGRAPHDB_PATH = os.path.join(DATA_DIR, \"MatGraphDB\")\n",
    "\n",
    "# Define the dataset URLs.\n",
    "DATASET_URL = \"https://drive.google.com/uc?id=1zSmEQbV8pNvjWdhFuCwOeoOzvfoS5XKP\"\n",
    "\n",
    "# Define the URL for the raw materials data.\n",
    "RAW_DATASET_URL = \"https://drive.google.com/uc?id=14guJqEK242XgRGEZA-zIrWyg4b-gX5zk\"  # (Not used below but available)\n",
    "\n",
    "# # Define the path to store the raw materials data.\n",
    "# RAW_DATASET_ZIP = os.path.join(config.data_dir, \"raw\", \"MPNearHull_v0.0.1_raw.zip\")\n",
    "\n",
    "# # Define the path to store the dataset.\n",
    "# DATASET_ZIP = os.path.join(config.data_dir, \"datasets\", \"MPNearHull_v0.0.1.zip\")\n",
    "\n",
    "print(\"Library imports and paths are set.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define Function for Downloading and Extracting Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Downloading raw materials data...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading...\n",
      "From (original): https://drive.google.com/uc?id=1zSmEQbV8pNvjWdhFuCwOeoOzvfoS5XKP\n",
      "From (redirected): https://drive.google.com/uc?id=1zSmEQbV8pNvjWdhFuCwOeoOzvfoS5XKP&confirm=t&uuid=5bcba796-ff8e-4bb3-bc09-39d3f1136dc1\n",
      "To: c:\\Users\\lllang\\Desktop\\Current_Projects\\MatGraphDB\\examples\\notebooks\\materials\\MPNearHull_v0.0.1_raw.zip\n",
      "100%|██████████| 632M/632M [00:11<00:00, 53.6MB/s] \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting raw materials data...\n",
      "Raw materials data ready!\n"
     ]
    }
   ],
   "source": [
    "def download_raw_materials(mp_materials_path):\n",
    "    \"\"\"\n",
    "    Download and extract the raw materials data if it is not already present.\n",
    "    \"\"\"\n",
    "    if not os.path.exists(mp_materials_path):\n",
    "        \n",
    "        os.makedirs(mp_materials_path, exist_ok=True)\n",
    "        print(\"Downloading raw materials data...\")\n",
    "        \n",
    "        raw_dataset_zip = os.path.join(mp_materials_path, \"MPNearHull_v0.0.1_raw.zip\")\n",
    "        # Note: Here we use DATASET_URL as in the original code.\n",
    "        gdown.download(DATASET_URL, output=raw_dataset_zip, quiet=False)\n",
    "        \n",
    "        print(\"Extracting raw materials data...\")\n",
    "        with zipfile.ZipFile(raw_dataset_zip, \"r\") as zip_ref:\n",
    "            zip_ref.extractall(mp_materials_path)\n",
    "        \n",
    "        \n",
    "        files=os.listdir(mp_materials_path)\n",
    "        os.remove(raw_dataset_zip)\n",
    "        mp_nearhull_path = os.path.join(mp_materials_path, \"MPNearHull\")\n",
    "        tmp_materials_path = os.path.join(mp_nearhull_path, \"nodes\", \"material\")\n",
    "        materials_files = os.listdir(tmp_materials_path)\n",
    "        for file in materials_files:\n",
    "            shutil.move(os.path.join(tmp_materials_path, file), os.path.join(mp_materials_path, file))\n",
    "            \n",
    "        shutil.rmtree(mp_nearhull_path)\n",
    "        print(\"Raw materials data ready!\")\n",
    "        \n",
    "# Optionally, download the raw materials data if you plan to initialize from raw files.\n",
    "if not os.path.exists(MATERIALS_PATH):\n",
    "    download_raw_materials(MATERIALS_PATH)\n",
    "else:\n",
    "    print(\"Raw materials data already exists.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Initialize a Materials Store"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n",
      "NODE STORE SUMMARY\n",
      "============================================================\n",
      "Node type: material\n",
      "• Number of nodes: 80643\n",
      "• Number of features: 136\n",
      "Storage path: ..\\..\\data\\examples\\01\\material\n",
      "\n",
      "\n",
      "############################################################\n",
      "METADATA\n",
      "############################################################\n",
      "• class: MaterialStore\n",
      "• class_module: matgraphdb.materials.nodes.materials\n",
      "• node_type: material\n",
      "• name_column: id\n",
      "\n",
      "############################################################\n",
      "NODE DETAILS\n",
      "############################################################\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from matgraphdb import MaterialStore\n",
    "\n",
    "materials_store = MaterialStore(storage_path=MATERIALS_PATH)\n",
    "print(materials_store)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialize a MatGraphDB Instance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n",
      "GRAPH DATABASE SUMMARY\n",
      "============================================================\n",
      "Name: MatGraphDB\n",
      "Storage path: ..\\..\\data\\examples\\01\\MatGraphDB\n",
      "└── Repository structure:\n",
      "    ├── nodes/                 (..\\..\\data\\examples\\01\\MatGraphDB\\nodes)\n",
      "    ├── edges/                 (..\\..\\data\\examples\\01\\MatGraphDB\\edges)\n",
      "    ├── edge_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\edge_generators)\n",
      "    ├── node_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\node_generators)\n",
      "    └── graph/                 (..\\..\\data\\examples\\01\\MatGraphDB\\graph)\n",
      "\n",
      "############################################################\n",
      "NODE DETAILS\n",
      "############################################################\n",
      "Total node types: 1\n",
      "------------------------------------------------------------\n",
      "• Node type: material\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 136\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE DETAILS\n",
      "############################################################\n",
      "Total edge types: 0\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "NODE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total node generators: 0\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total edge generators: 0\n",
      "------------------------------------------------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "\n",
    "from matgraphdb import MatGraphDB\n",
    "\n",
    "if not os.path.exists(MATGRAPHDB_PATH):\n",
    "    shutil.rmtree(MATGRAPHDB_PATH)\n",
    "mdb = MatGraphDB(storage_path=MATGRAPHDB_PATH,materials_store=materials_store)\n",
    "\n",
    "print(mdb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Adding Nodes\n",
    "\n",
    "In this section, we will add the nodes to the MatGraphDB instance. We will be using some of the built-in node generators to add the nodes to the MatGraphDB instance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matgraphdb.materials.nodes import (\n",
    "    element, chemenv, crystal_system, magnetic_state, \n",
    "    oxidation_state, space_group, wyckoff, material_site, material_lattice\n",
    ")\n",
    "\n",
    "# Here we define the generator functions and arguments if they are needed. \n",
    "# For instance, to get the materials sites and lattices, we need to pass the materials store to the generator function.\n",
    "node_generators = [\n",
    "    {\"generator_func\": element},\n",
    "    {\"generator_func\": chemenv},\n",
    "    {\"generator_func\": crystal_system},\n",
    "    {\"generator_func\": magnetic_state},\n",
    "    {\"generator_func\": oxidation_state},\n",
    "    {\"generator_func\": space_group},\n",
    "    {\"generator_func\": wyckoff},\n",
    "    {\n",
    "        \"generator_func\": material_site,\n",
    "        \"generator_args\": {\"material_store\": mdb.node_stores[\"material\"]},\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_lattice,\n",
    "        \"generator_args\": {\"material_store\": mdb.node_stores[\"material\"]},\n",
    "    },\n",
    "]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can add the node generators to the MatGraphDB instance. When we add the generator, it will immediately execute and add the nodes to the database."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adding node generator: element\n",
      "Adding node generator: chemenv\n",
      "Adding node generator: crystal_system\n",
      "Adding node generator: magnetic_state\n",
      "Adding node generator: oxidation_state\n",
      "Adding node generator: space_group\n",
      "Adding node generator: wyckoff\n",
      "Adding node generator: material_site\n",
      "Adding node generator: material_lattice\n",
      "Node generators have been initialized.\n",
      "============================================================\n",
      "GRAPH DATABASE SUMMARY\n",
      "============================================================\n",
      "Name: MatGraphDB\n",
      "Storage path: ..\\..\\data\\examples\\01\\MatGraphDB\n",
      "└── Repository structure:\n",
      "    ├── nodes/                 (..\\..\\data\\examples\\01\\MatGraphDB\\nodes)\n",
      "    ├── edges/                 (..\\..\\data\\examples\\01\\MatGraphDB\\edges)\n",
      "    ├── edge_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\edge_generators)\n",
      "    ├── node_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\node_generators)\n",
      "    └── graph/                 (..\\..\\data\\examples\\01\\MatGraphDB\\graph)\n",
      "\n",
      "############################################################\n",
      "NODE DETAILS\n",
      "############################################################\n",
      "Total node types: 10\n",
      "------------------------------------------------------------\n",
      "• Node type: material\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 136\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "------------------------------------------------------------\n",
      "• Node type: element\n",
      "  - Number of nodes: 118\n",
      "  - Number of features: 99\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "------------------------------------------------------------\n",
      "• Node type: chemenv\n",
      "  - Number of nodes: 67\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "------------------------------------------------------------\n",
      "• Node type: crystal_system\n",
      "  - Number of nodes: 7\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "------------------------------------------------------------\n",
      "• Node type: magnetic_state\n",
      "  - Number of nodes: 5\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\magnetic_state\n",
      "------------------------------------------------------------\n",
      "• Node type: oxidation_state\n",
      "  - Number of nodes: 19\n",
      "  - Number of features: 3\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\oxidation_state\n",
      "------------------------------------------------------------\n",
      "• Node type: space_group\n",
      "  - Number of nodes: 230\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "------------------------------------------------------------\n",
      "• Node type: wyckoff\n",
      "  - Number of nodes: 1380\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\wyckoff\n",
      "------------------------------------------------------------\n",
      "• Node type: material_site\n",
      "  - Number of nodes: 2545026\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_site\n",
      "------------------------------------------------------------\n",
      "• Node type: material_lattice\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 12\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_lattice\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE DETAILS\n",
      "############################################################\n",
      "Total edge types: 0\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "NODE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total node generators: 9\n",
      "------------------------------------------------------------\n",
      "• Generator: element\n",
      "Generator Args:\n",
      "  - generator_func: [<function element at 0x000001E1A2C82C10>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "  - generator_name: ['element']\n",
      "  - id: [0]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: chemenv\n",
      "Generator Args:\n",
      "  - generator_func: [<function chemenv at 0x000001E1A2C82D30>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "  - generator_name: ['chemenv']\n",
      "  - id: [1]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: crystal_system\n",
      "Generator Args:\n",
      "  - generator_func: [<function crystal_system at 0x000001E1A2C82E50>]\n",
      "  - generator_name: ['crystal_system']\n",
      "  - id: [2]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: magnetic_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function magnetic_state at 0x000001E1A2C82F70>]\n",
      "  - generator_name: ['magnetic_state']\n",
      "  - id: [3]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: oxidation_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function oxidation_state at 0x000001E1A2C8D0D0>]\n",
      "  - generator_name: ['oxidation_state']\n",
      "  - id: [4]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: space_group\n",
      "Generator Args:\n",
      "  - generator_func: [<function space_group at 0x000001E1A2C8D1F0>]\n",
      "  - generator_name: ['space_group']\n",
      "  - id: [5]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: wyckoff\n",
      "Generator Args:\n",
      "  - generator_func: [<function wyckoff at 0x000001E1A2C8D310>]\n",
      "  - generator_name: ['wyckoff']\n",
      "  - id: [6]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_site\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_site at 0x000001E1C487D940>]\n",
      "  - generator_name: ['material_site']\n",
      "  - id: [7]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_lattice\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_lattice at 0x000001E1C487D820>]\n",
      "  - generator_name: ['material_lattice']\n",
      "  - id: [8]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total edge generators: 0\n",
      "------------------------------------------------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Add each node generator to the database.\n",
    "for generator in node_generators:\n",
    "    generator_func = generator.get(\"generator_func\")\n",
    "    generator_args = generator.get(\"generator_args\", None)\n",
    "    print(f\"Adding node generator: {generator_func.__name__}\")\n",
    "    mdb.add_node_generator(generator_func=generator_func, generator_args=generator_args)\n",
    "\n",
    "print(\"Node generators have been initialized.\")\n",
    "\n",
    "print(mdb)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Adding Edges\n",
    "\n",
    "In this section, we will add the edges to the MatGraphDB instance. We will be using some of the built-in edge generators to add the edges to the MatGraphDB instance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adding edge generator: element_element_neighborsByGroupPeriod\n",
      "Adding edge generator: element_oxiState_canOccur\n",
      "Adding edge generator: material_chemenv_containsSite\n",
      "Adding edge generator: material_crystalSystem_has\n",
      "Adding edge generator: material_element_has\n",
      "Adding edge generator: material_lattice_has\n",
      "Adding edge generator: material_spg_has\n",
      "Adding edge generator: element_chemenv_canOccur\n",
      "Adding edge generator: spg_crystalSystem_isApart\n",
      "Adding edge generator: element_element_bonds\n",
      "Edge generators have been initialized.\n",
      "============================================================\n",
      "GRAPH DATABASE SUMMARY\n",
      "============================================================\n",
      "Name: MatGraphDB\n",
      "Storage path: ..\\..\\data\\examples\\01\\MatGraphDB\n",
      "└── Repository structure:\n",
      "    ├── nodes/                 (..\\..\\data\\examples\\01\\MatGraphDB\\nodes)\n",
      "    ├── edges/                 (..\\..\\data\\examples\\01\\MatGraphDB\\edges)\n",
      "    ├── edge_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\edge_generators)\n",
      "    ├── node_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\node_generators)\n",
      "    └── graph/                 (..\\..\\data\\examples\\01\\MatGraphDB\\graph)\n",
      "\n",
      "############################################################\n",
      "NODE DETAILS\n",
      "############################################################\n",
      "Total node types: 10\n",
      "------------------------------------------------------------\n",
      "• Node type: material\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 136\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "------------------------------------------------------------\n",
      "• Node type: element\n",
      "  - Number of nodes: 118\n",
      "  - Number of features: 99\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "------------------------------------------------------------\n",
      "• Node type: chemenv\n",
      "  - Number of nodes: 67\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "------------------------------------------------------------\n",
      "• Node type: crystal_system\n",
      "  - Number of nodes: 7\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "------------------------------------------------------------\n",
      "• Node type: magnetic_state\n",
      "  - Number of nodes: 5\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\magnetic_state\n",
      "------------------------------------------------------------\n",
      "• Node type: oxidation_state\n",
      "  - Number of nodes: 19\n",
      "  - Number of features: 3\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\oxidation_state\n",
      "------------------------------------------------------------\n",
      "• Node type: space_group\n",
      "  - Number of nodes: 230\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "------------------------------------------------------------\n",
      "• Node type: wyckoff\n",
      "  - Number of nodes: 1380\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\wyckoff\n",
      "------------------------------------------------------------\n",
      "• Node type: material_site\n",
      "  - Number of nodes: 2545026\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_site\n",
      "------------------------------------------------------------\n",
      "• Node type: material_lattice\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 12\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_lattice\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE DETAILS\n",
      "############################################################\n",
      "Total edge types: 10\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_element_neighborsByGroupPeriod\n",
      "  - Number of edges: 391\n",
      "  - Number of features: 14\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_element_neighborsByGroupPeriod\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_oxiState_canOccur\n",
      "  - Number of edges: 162\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_oxiState_canOccur\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_chemenv_containsSite\n",
      "  - Number of edges: 2542897\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_chemenv_containsSite\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_crystalSystem_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 10\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_crystalSystem_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_element_has\n",
      "  - Number of edges: 270902\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_element_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_lattice_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_lattice_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_spg_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 10\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_spg_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_chemenv_canOccur\n",
      "  - Number of edges: 270474\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_chemenv_canOccur\n",
      "------------------------------------------------------------\n",
      "• Edge type: spg_crystalSystem_isApart\n",
      "  - Number of edges: 230\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\spg_crystalSystem_isApart\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_element_bonds\n",
      "  - Number of edges: 3069943\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_element_bonds\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "NODE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total node generators: 9\n",
      "------------------------------------------------------------\n",
      "• Generator: element\n",
      "Generator Args:\n",
      "  - generator_func: [<function element at 0x000001E1A2C82C10>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "  - generator_name: ['element']\n",
      "  - id: [0]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: chemenv\n",
      "Generator Args:\n",
      "  - generator_func: [<function chemenv at 0x000001E1A2C82D30>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "  - generator_name: ['chemenv']\n",
      "  - id: [1]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: crystal_system\n",
      "Generator Args:\n",
      "  - generator_func: [<function crystal_system at 0x000001E1A2C82E50>]\n",
      "  - generator_name: ['crystal_system']\n",
      "  - id: [2]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: magnetic_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function magnetic_state at 0x000001E1A2C82F70>]\n",
      "  - generator_name: ['magnetic_state']\n",
      "  - id: [3]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: oxidation_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function oxidation_state at 0x000001E1A2C8D0D0>]\n",
      "  - generator_name: ['oxidation_state']\n",
      "  - id: [4]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: space_group\n",
      "Generator Args:\n",
      "  - generator_func: [<function space_group at 0x000001E1A2C8D1F0>]\n",
      "  - generator_name: ['space_group']\n",
      "  - id: [5]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: wyckoff\n",
      "Generator Args:\n",
      "  - generator_func: [<function wyckoff at 0x000001E1A2C8D310>]\n",
      "  - generator_name: ['wyckoff']\n",
      "  - id: [6]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_site\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_site at 0x000001E1C487D940>]\n",
      "  - generator_name: ['material_site']\n",
      "  - id: [7]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_lattice\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_lattice at 0x000001E1C487D820>]\n",
      "  - generator_name: ['material_lattice']\n",
      "  - id: [8]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total edge generators: 10\n",
      "------------------------------------------------------------\n",
      "• Generator: element_oxiState_canOccur\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - oxiState_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\oxidation_state\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_chemenv_containsSite\n",
      "Generator Args:\n",
      "  - chemenv_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_crystalSystem_has\n",
      "Generator Args:\n",
      "  - crystal_system_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_element_neighborsByGroupPeriod\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_element_has\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_lattice_has\n",
      "Generator Args:\n",
      "  - lattice_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_lattice\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_spg_has\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - spg_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_chemenv_canOccur\n",
      "Generator Args:\n",
      "  - chemenv_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: spg_crystalSystem_isApart\n",
      "Generator Args:\n",
      "  - crystal_system_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "  - spg_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_element_bonds\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from matgraphdb.materials.edges import (\n",
    "    material_element_has,\n",
    "    material_lattice_has,\n",
    "    material_spg_has,\n",
    "    element_element_neighborsByGroupPeriod,\n",
    "    element_element_bonds,\n",
    "    element_oxiState_canOccur,\n",
    "    material_chemenv_containsSite,\n",
    "    material_crystalSystem_has,\n",
    "    element_chemenv_canOccur,\n",
    "    spg_crystalSystem_isApart,\n",
    ")\n",
    "\n",
    "\n",
    "\n",
    "# List of edge generator configurations.\n",
    "edge_generators = [\n",
    "    {\n",
    "        \"generator_func\": element_element_neighborsByGroupPeriod,\n",
    "        \"generator_args\": {\"element_store\": mdb.node_stores[\"element\"]},\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": element_oxiState_canOccur,\n",
    "        \"generator_args\": {\n",
    "            \"element_store\": mdb.node_stores[\"element\"],\n",
    "            \"oxiState_store\": mdb.node_stores[\"oxidation_state\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_chemenv_containsSite,\n",
    "        \"generator_args\": {\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "            \"chemenv_store\": mdb.node_stores[\"chemenv\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_crystalSystem_has,\n",
    "        \"generator_args\": {\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "            \"crystal_system_store\": mdb.node_stores[\"crystal_system\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_element_has,\n",
    "        \"generator_args\": {\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "            \"element_store\": mdb.node_stores[\"element\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_lattice_has,\n",
    "        \"generator_args\": {\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "            \"lattice_store\": mdb.node_stores[\"material_lattice\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": material_spg_has,\n",
    "        \"generator_args\": {\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "            \"spg_store\": mdb.node_stores[\"space_group\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": element_chemenv_canOccur,\n",
    "        \"generator_args\": {\n",
    "            \"element_store\": mdb.node_stores[\"element\"],\n",
    "            \"chemenv_store\": mdb.node_stores[\"chemenv\"],\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": spg_crystalSystem_isApart,\n",
    "        \"generator_args\": {\n",
    "            \"spg_store\": mdb.node_stores[\"space_group\"],\n",
    "            \"crystal_system_store\": mdb.node_stores[\"crystal_system\"],\n",
    "        },\n",
    "    },\n",
    "    {\n",
    "        \"generator_func\": element_element_bonds,\n",
    "        \"generator_args\": {\n",
    "            \"element_store\": mdb.node_stores[\"element\"],\n",
    "            \"material_store\": mdb.node_stores[\"material\"],\n",
    "        },\n",
    "    },\n",
    "]\n",
    "\n",
    "\n",
    "# Add each edge generator to the database and run them immediately.\n",
    "for generator in edge_generators:\n",
    "    generator_func = generator.get(\"generator_func\")\n",
    "    generator_args = generator.get(\"generator_args\", None)\n",
    "    print(f\"Adding edge generator: {generator_func.__name__}\")\n",
    "    mdb.add_edge_generator(generator_func=generator_func, generator_args=generator_args, run_immediately=True)\n",
    "\n",
    "print(\"Edge generators have been initialized.\")\n",
    "print(mdb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Verifying the Database\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n",
      "GRAPH DATABASE SUMMARY\n",
      "============================================================\n",
      "Name: MatGraphDB\n",
      "Storage path: ..\\..\\data\\examples\\01\\MatGraphDB\n",
      "└── Repository structure:\n",
      "    ├── nodes/                 (..\\..\\data\\examples\\01\\MatGraphDB\\nodes)\n",
      "    ├── edges/                 (..\\..\\data\\examples\\01\\MatGraphDB\\edges)\n",
      "    ├── edge_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\edge_generators)\n",
      "    ├── node_generators/       (..\\..\\data\\examples\\01\\MatGraphDB\\node_generators)\n",
      "    └── graph/                 (..\\..\\data\\examples\\01\\MatGraphDB\\graph)\n",
      "\n",
      "############################################################\n",
      "NODE DETAILS\n",
      "############################################################\n",
      "Total node types: 10\n",
      "------------------------------------------------------------\n",
      "• Node type: material\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 136\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "------------------------------------------------------------\n",
      "• Node type: element\n",
      "  - Number of nodes: 118\n",
      "  - Number of features: 99\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "------------------------------------------------------------\n",
      "• Node type: chemenv\n",
      "  - Number of nodes: 67\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "------------------------------------------------------------\n",
      "• Node type: crystal_system\n",
      "  - Number of nodes: 7\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "------------------------------------------------------------\n",
      "• Node type: magnetic_state\n",
      "  - Number of nodes: 5\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\magnetic_state\n",
      "------------------------------------------------------------\n",
      "• Node type: oxidation_state\n",
      "  - Number of nodes: 19\n",
      "  - Number of features: 3\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\oxidation_state\n",
      "------------------------------------------------------------\n",
      "• Node type: space_group\n",
      "  - Number of nodes: 230\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "------------------------------------------------------------\n",
      "• Node type: wyckoff\n",
      "  - Number of nodes: 1380\n",
      "  - Number of features: 2\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\wyckoff\n",
      "------------------------------------------------------------\n",
      "• Node type: material_site\n",
      "  - Number of nodes: 2545026\n",
      "  - Number of features: 15\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_site\n",
      "------------------------------------------------------------\n",
      "• Node type: material_lattice\n",
      "  - Number of nodes: 80643\n",
      "  - Number of features: 12\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_lattice\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE DETAILS\n",
      "############################################################\n",
      "Total edge types: 10\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_element_neighborsByGroupPeriod\n",
      "  - Number of edges: 391\n",
      "  - Number of features: 14\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_element_neighborsByGroupPeriod\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_oxiState_canOccur\n",
      "  - Number of edges: 162\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_oxiState_canOccur\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_chemenv_containsSite\n",
      "  - Number of edges: 2542897\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_chemenv_containsSite\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_crystalSystem_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 10\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_crystalSystem_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_element_has\n",
      "  - Number of edges: 270902\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_element_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_lattice_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 8\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_lattice_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: material_spg_has\n",
      "  - Number of edges: 80643\n",
      "  - Number of features: 10\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\material_spg_has\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_chemenv_canOccur\n",
      "  - Number of edges: 270474\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_chemenv_canOccur\n",
      "------------------------------------------------------------\n",
      "• Edge type: spg_crystalSystem_isApart\n",
      "  - Number of edges: 230\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\spg_crystalSystem_isApart\n",
      "------------------------------------------------------------\n",
      "• Edge type: element_element_bonds\n",
      "  - Number of edges: 3069943\n",
      "  - Number of features: 7\n",
      "  - db_path: ..\\..\\data\\examples\\01\\MatGraphDB\\edges\\element_element_bonds\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "NODE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total node generators: 9\n",
      "------------------------------------------------------------\n",
      "• Generator: element\n",
      "Generator Args:\n",
      "  - generator_func: [<function element at 0x000001E1A2C82C10>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "  - generator_name: ['element']\n",
      "  - id: [0]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\imputed_periodic_table_values.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: chemenv\n",
      "Generator Args:\n",
      "  - generator_func: [<function chemenv at 0x000001E1A2C82D30>]\n",
      "  - generator_kwargs.base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "  - generator_name: ['chemenv']\n",
      "  - id: [1]\n",
      "Generator Kwargs:\n",
      "  - base_file: ['C:\\\\Users\\\\lllang\\\\Desktop\\\\Current_Projects\\\\MatGraphDB\\\\matgraphdb\\\\utils\\\\chem_utils\\\\resources\\\\coordination_geometries.parquet']\n",
      "------------------------------------------------------------\n",
      "• Generator: crystal_system\n",
      "Generator Args:\n",
      "  - generator_func: [<function crystal_system at 0x000001E1A2C82E50>]\n",
      "  - generator_name: ['crystal_system']\n",
      "  - id: [2]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: magnetic_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function magnetic_state at 0x000001E1A2C82F70>]\n",
      "  - generator_name: ['magnetic_state']\n",
      "  - id: [3]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: oxidation_state\n",
      "Generator Args:\n",
      "  - generator_func: [<function oxidation_state at 0x000001E1A2C8D0D0>]\n",
      "  - generator_name: ['oxidation_state']\n",
      "  - id: [4]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: space_group\n",
      "Generator Args:\n",
      "  - generator_func: [<function space_group at 0x000001E1A2C8D1F0>]\n",
      "  - generator_name: ['space_group']\n",
      "  - id: [5]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: wyckoff\n",
      "Generator Args:\n",
      "  - generator_func: [<function wyckoff at 0x000001E1A2C8D310>]\n",
      "  - generator_name: ['wyckoff']\n",
      "  - id: [6]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_site\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_site at 0x000001E1C487D940>]\n",
      "  - generator_name: ['material_site']\n",
      "  - id: [7]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_lattice\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - generator_func: [<function material_lattice at 0x000001E1C487D820>]\n",
      "  - generator_name: ['material_lattice']\n",
      "  - id: [8]\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "\n",
      "############################################################\n",
      "EDGE GENERATOR DETAILS\n",
      "############################################################\n",
      "Total edge generators: 10\n",
      "------------------------------------------------------------\n",
      "• Generator: element_oxiState_canOccur\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - oxiState_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\oxidation_state\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_chemenv_containsSite\n",
      "Generator Args:\n",
      "  - chemenv_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_crystalSystem_has\n",
      "Generator Args:\n",
      "  - crystal_system_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_element_neighborsByGroupPeriod\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_element_has\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_lattice_has\n",
      "Generator Args:\n",
      "  - lattice_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material_lattice\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: material_spg_has\n",
      "Generator Args:\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "  - spg_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_chemenv_canOccur\n",
      "Generator Args:\n",
      "  - chemenv_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\chemenv\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: spg_crystalSystem_isApart\n",
      "Generator Args:\n",
      "  - crystal_system_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\crystal_system\n",
      "  - spg_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\space_group\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "• Generator: element_element_bonds\n",
      "Generator Args:\n",
      "  - element_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\element\n",
      "  - material_store: ..\\..\\data\\examples\\01\\MatGraphDB\\nodes\\material\n",
      "Generator Kwargs:\n",
      "------------------------------------------------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(mdb)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "matgraphdb_dev",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  },
  "nbsphinx": {
   "execute": "never"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}